package assist.client.gwt.view.ui;

import assist.client.gwt.service.StatsProvider;
import assist.domain.model.Stats;

import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;

public abstract class StatsViewImpl extends Composite
{
    private StatsProvider statsProvider;
    private HandlerRegistration statsHandlerRegistration;
    
    protected void setStatsProvider(StatsProvider statsProvider)
    {          
        this.statsProvider = statsProvider;
        updateStatsTable();
        if (statsHandlerRegistration != null)
        {
            statsHandlerRegistration.removeHandler();
        }
        statsHandlerRegistration = this.statsProvider.addValueChangeHandler(new ValueChangeHandler<Stats>(){

            @Override
            public void onValueChange(ValueChangeEvent<Stats> event)
            {
                updateStatsTable();
            }        
        });
    }
    
    protected StatsProvider getStatsProvider()
    {
        return this.statsProvider;
    }
    
    private void updateStatsTable()
    {
        StatsTable statsTable = getStatsTable();
        statsTable.setStatsQuery(statsProvider.getStatsQuery());
        if (!statsProvider.getDataDisplays().contains(statsTable))
        {
            statsProvider.addDataDisplay(statsTable);
        }         
    }
    
    protected abstract StatsTable getStatsTable();
}
